//
//  SNWeChatPayTool.m
//  ShunLand
//
//  Created by 冯贺 on 2018/3/20.
//  Copyright © 2018年 冯贺. All rights reserved.
//

#import "SNWeChatPayTool.h"

@interface SNWeChatPayTool()

@property (nonatomic, copy)paySuccessBlock successBlcok;
@end

@implementation SNWeChatPayTool
SingletonM(payTool)

- (void)applyWeChatPay:(NSDictionary *)responseDict complete:(void (^)(void))successBlcok{
    
    self.successBlcok = successBlcok;
    
    //需要创建这个支付对象
    PayReq *req   = [[PayReq alloc] init];
    //由用户微信号和AppID组成的唯一标识，用于校验微信用户
    req.openID = responseDict[@"appid"];
    
    // 商家id，在注册的时候给的
    req.partnerId = responseDict[@"mch_id"];
    
    // 预支付订单这个是后台跟微信服务器交互后，微信服务器传给你们服务器的，你们服务器再传给你
    req.prepayId = responseDict[@"prepayid"];
    
    // 根据财付通文档填写的数据和签名
    //这个比较特殊，是固定的，只能是即req.package = Sign=WXPay
    req.package = @"Sign=WXPay";
    
    // 随机编码，为了防止重复的，在后台生成
    req.nonceStr  = responseDict[@"noncestr"];
    
    // 这个是时间戳，也是在后台生成的，为了验证支付的
    NSString * stamp = responseDict[@"timestamp"];
    req.timeStamp = stamp.intValue;
    
    // 这个签名也是后台做的
    req.sign = responseDict[@"sign"];
    
    //发送请求到微信，等待微信返回onResp
    [WXApi sendReq:req];
    
    
}

//微信SDK自带的方法，处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的
-(void)onResp:(BaseResp*)resp
{
    //启动微信支付的response
//    NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果，实际支付结果需要去微信服务器端查询
        switch (resp.errCode) {
            case 0:
                if (self.successBlcok) {
                    self.successBlcok();
                }
//                payResoult = @"支付结果：成功！";
//                [[NSNotificationCenter defaultCenter]postNotificationName:@"paySuccessful" object:nil];
                break;
            case -1:
//                payResoult = @"支付结果：失败！";
                break;
            case -2:
//                payResoult = @"用户已经退出支付！";
                break;
            default:
//                payResoult = [NSString stringWithFormat:@"支付结果：失败！retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                break;
        }
    }
}
@end
